/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;
 
import java.sql.*;
 
/**
 *
 * @author kike
 */
public class Clientes {
 
    Connection con;
 
    public Clientes() {
        this.con = Conexion.getConexion();
    }
 
    public Object[][] getClientes() {
 
        Object[][] filas = null;
        try {
            Statement query = this.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            ResultSet res = query.executeQuery("SELECT cl.rut, cl.nombre, cl.telefono, cl.mail, cl.deuda, ciu.nombre as nombre_ciudad "
                    + "FROM Clientes as cl INNER JOIN Ciudades as ciu "
                    + "ON cl.id_ciudad = ciu.id_ciudad");
            //Clase para obtener más datos sobre la consulta
            ResultSetMetaData resmd = res.getMetaData();
            //Obtengo el total de columnas de la consulta
            int totalColumnas = resmd.getColumnCount();
            res.last();
            //obtengo el total de filas
            int totalFilas = res.getRow();
            res.beforeFirst();
 
            //Creo el objeto filas
            filas = new Object[totalFilas][totalColumnas];
 
            //Mientras hallan resultados poblo el objeto filas para luego devolverlo
            while (res.next()) {
                for (int i = 0; i < totalColumnas; i++) {
                    filas[(res.getRow() - 1)][i] = res.getString((i + 1));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return filas;
    }
 
    public Object[] getCliente(String rut) {
        Object[] filas = null;
        try {
            PreparedStatement query = this.con.prepareStatement("SELECT cl.rut, cl.nombre, cl.telefono, cl.mail, cl.deuda, ciu.nombre as nombre_ciudad "
                    + "FROM Clientes as cl INNER JOIN Ciudades as ciu "
                    + "ON cl.id_ciudad = ciu.id_ciudad "
                    + "WHERE rut=?");
            query.setString(1, rut);
            ResultSet res = query.executeQuery();
            //Clase para obtener más datos sobre la consulta
            ResultSetMetaData resmd = res.getMetaData();
            //Obtengo el total de columnas de la consulta
            int totalColumnas = resmd.getColumnCount();
 
            //Creo el objeto filas
            filas = new Object[totalColumnas];
 
            //Si existe el cliente
            if (res.next()) {
                for (int i = 0; i < totalColumnas; i++) {
                    filas[i] = res.getString(i + 1);
                }
            } else {
                return null;
            }
 
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return filas;
    }
 
    public boolean addCliente(String rut, String nombre, String telefono, String mail, boolean deuda, int id_ciudad) {
 
        //compruebo que el usuario no existe
        if (this.existeCliente(rut.trim())) {
            Funciones.mensaje("El cliente ya existe, prueba con otro");
            return false;
        }
        try {
            PreparedStatement query = this.con.prepareStatement("INSERT INTO Clientes (rut,nombre,telefono,mail,deuda,id_ciudad) values (?,?,?,?,?,?);");
            query.setString(1, rut.trim());
            query.setString(2, nombre);
            query.setString(3, telefono);
            query.setString(4, mail);
            query.setBoolean(5, deuda);
            query.setInt(6, id_ciudad);
 
            query.executeUpdate();
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return true;
    }
 
    public boolean existeCliente(String rut) {
        boolean existe = false;
        try {
            PreparedStatement query = this.con.prepareStatement("SELECT rut FROM Clientes WHERE rut=?");
            query.setString(1, rut.trim());
            query.executeQuery();
            ResultSet res = query.executeQuery();
 
            if (res.next()) {
                existe = true;
            } else {
                existe = false;
            }
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return existe;
    }
 
    public void deleteCliente(String rut) {
        try {
            PreparedStatement query = this.con.prepareStatement("DELETE FROM Clientes "
                    + "WHERE rut =? ");
            query.setString(1, rut);
 
            query.executeUpdate();
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public boolean updateCliente(String rut, String nombre, String telefono, String mail, boolean deuda, int id_ciudad) {
 
        //compruebo que el cliente existe
        if (!this.existeCliente(rut.trim())) {
            Funciones.mensaje("El cliente no existe");
            return false;
        }
        try {
            PreparedStatement query = this.con.prepareStatement("UPDATE Clientes "
                    + "SET nombre= ?, "
                    + "telefono= ?, "
                    + "mail= ?, "
                    + "deuda= ?, "
                    + "id_ciudad= ? "
                    + " WHERE rut = ?");
            query.setString(1, nombre.trim());
            query.setString(2, telefono.trim());
            query.setString(3, mail.trim());
            query.setBoolean(4, deuda);
            query.setInt(5, id_ciudad);
            query.setString(6, rut);;
            query.executeUpdate();
            query.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return true;
    }
}